今回は6章「モジュール」.@iseebiが担当でした.
感想など
importしてるmoduleの関数をエクスポートできる(再エクスポート)
nullとかはPreludeでエクスポートされてるけど,実はData.Listにおる.Preludeで再エクスポートしているのだ.
Hoogle便利すぎ
ソースコード見れたりする.困ったらコード見るといい.
:editめちゃめちゃ便利
ghciで:edit
練習問題
問題はこちら.今回から各自練習問題を考えてくる形式だったけど,みんな用意できなかった(自分含む).まあ今回の範囲が範囲だけにしゃーないかな(言い訳です,ハイ).
Prelude.null と Data.Map.null のように、既存の文字ジュールに似た関数を持つモジュールをつくる場合は、isMapNullのように名前がぶつからない配慮をするのではなく、あえて同じ名前の関数群を作り、ユーザーにqualifyして選んでもらうのがスマートです。
そこで
- main-todo.hs にあるように、importすると足し算と掛け算記号の意味が入れ替わるParupunteモジュールを作ってください。
- main-todo.hs のimport文を埋めてParupunteを使ってみてください。
- Parupunteを使っている同じモジュールで、Preludeの正規の足し算、掛け算も使ってみてください。
パルプンテ問題がおもしろかった.出題者は@nushioさんなんだけど,たった一問でmoduleのハマりどころを学習させつつクレバーなコードの書き方まで教えるのはさすがだと思う.
このスクリプトでは、英語圏でよく冗談めいて使われる 換字式暗号ROT13(http://ja.wikipedia.org/wiki/ROT13) の動作を確かめて遊んでいます。 ところが、ここで使われているモジュール Toys.Rot13 はまだ実装されていません! testRot13 が True を返すように、Toys.Rot13 を実装 してあげてください。
testRot13 が期待する結果を直接返す(^^;)というひどい 反則さえしなければ、実装方法は問いません。
ともかく、モジュールを作って使うという経験をしてみましょう!
こっちは@akaneharaさんの出題.簡単なRot13なんで,本章の例題応用すれば簡単だなーとか思ったけど,このテストコードをちゃんと動かすにはちょっと頭をひねる必要があった.これ解くためにヘルパ関数isApperとisAlphaを書いたらどっちもData.Charにあって焦った.importするときに「被ってるよ!」って怒られた.ちゃんと失敗して復習もできていい感じ.回答のコードは以下.
まとめ
Haskellのモジュールは柔軟にロードできる.また,モジュールを書くときは関数に衝突するような名前をつけておいたほうが使ってもらいやすい.Hoogleと:editめっちゃ便利.特にHoogleでソースコード読む作戦はいい.
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (44件) を見る
- 作者: Miran Lipovaca
- 出版社/メーカー: オーム社
- 発売日: 2012/09/21
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る